package main

//func main() {
//	name := "路飞"
//	fmt.Println("name变量的值为:",name) // name变量的值为: 路飞
//	fmt.Println("name变量的内存地址为:",&name) // name变量的内存地址为: 0x14000010230
//}

//func main() {
//	name := "小明"
//	age := 18
//
//	nameP := &name
//	ageP := &age
//
//	fmt.Println(nameP, ageP)
//	//nameP = ageP  // 指针指向的类型不同，无法编译通过，Cannot use 'ageP' (type *int) as the type *string
//
//	//var intP *int
//	//intP = &name //指针类型不同，无法赋值
//
//	intP := new(int)
//	fmt.Println(intP, *intP) // 0x140000360c0, 0
//
//	// 修改指针指向的值
//	*intP = 16
//	fmt.Println(intP, *intP) // 0x140000360c0 16
//
//	// 修改变量的指针 所指向的值之后，变量所指向的值也会改变
//	*nameP = "王小明" // 可以简单的理解为 把name的内存地址指向新的值，存的值变了，但内存地址不会变
//	fmt.Println("nameP指向的值：", *nameP, nameP) // 王小明 0x14000102210
//	fmt.Println("name变量指向的值", name, &name) // 王小明 0x14000102210
//
//	//var intX *int // 没有使用new关键词声明的指针是不能被直接赋值的，因为还没有给他们分配内存地址
//	//*intX =10  //panic: runtime error: invalid memory address or nil pointer dereference
//
//	var intY *int = new(int)
//	*intY = 10
//	//更推荐简短声明法，这里是为了演示
//	//intP:=new(int)
//}
